import os
from google.appengine.ext.webapp import template

from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.ext import db

from bdd import *
from bases import *

#############################################################################
# GESTION TOUR
#############################################################################
class gereTour(webapp.RequestHandler):
    def get(self):
        #clsCombat.debug = True
        clsBases.gereTour()
        self.redirect("/gestion/affichePartie")        

#############################################################################
# GESTION PARTIE
#############################################################################
class affichePartie(webapp.RequestHandler):
    def get(self):
        parties = dbPartie().all()
        
        for partie in parties:
            joueurs = dbJoueur().all() 
            joueurs.filter("keyPartie =", partie.key())
            partie.nbJoueur = joueurs.count()

        #for partie in parties:
        #    print str(partie.key())
        #    print partie.nbJoueur

        template_values = {
            'listeParties': parties,
        }

        path = os.path.join(os.path.dirname(__file__), 'html/affichePartie.html')
        self.response.out.write(template.render(path, template_values))    

class creePartie(webapp.RequestHandler):
    def get(self):
        jeux = clsBases()
        jeux.nouvellePartie()
        jeux.initRoyaume()
        jeux.initRegion()
        
        self.redirect("/gestion/affichePartie")

class creePartiePreRemplis(webapp.RequestHandler):
    def get(self):
        user = users.get_current_user()
        if user == None : self.redirect(users.create_login_url(self.request.uri))
        self.response.headers['Content-Type'] = 'text/plain'
        
        # on nettois un peu
        clsBases.razBases()    # C'est du statique
        
        jeux = clsBases()
        # Verification que les tables globales soient bien cree
        jeux.initGlobal()
        jeux.nouvellePartie()   # On cree une partie, hop...
        jeux.initRoyaume()
        jeux.initRegion()       # On initialise les regions que maintenant car elle appartienne a partie
        # ce qui alimente la variable partie, donc tout joueur cree le sera dans la partie...
        
        jeux.ajouteJoueur("Bruno","France")
        jeux.setArmee("Bruno","1_d|0_|0_gg|1_k|0_|2_")
        # On deplace une armee francaise chez les bretons pour leur peter la gueule
        jeux.deplaceArmee("Bruno","Languedoc","Bretagne")

        jeux.ajouteJoueur("Raoul","Bretagne")
        jeux.setArmee("Raoul","2_e|1_g|1_ll|0_g|1_|1_")

        jeux.ajouteJoueur("Bob","Navarre")
        jeux.setArmee("Bob","2_ii|0_cc|0_d|0_m|0_|0_")
        jeux.deplaceArmee("Bob","Auxerois","Bretagne")
        
        # On deplace une armee Navaroise pour peter du paysans
        jeux.ajouteJoueur("John","France")
        jeux.setArmee("John","2_ef|0_|0_l|0_|0_|0_")
        jeux.deplaceArmee("John","Languedoc","Navarre")
        
        self.redirect("/gestion/affichePartie")

class startStopPartie(webapp.RequestHandler):
    def get(self):
        clePartie = self.request.get('clePartie')
        bases = clsBases(clePartie)
        bases.startStop()
        
        self.redirect("/gestion/affichePartie")

#############################################################################
# GESTION JOUEUR
#############################################################################
class afficheJoueur(webapp.RequestHandler):
    def get(self):
        clePartie = self.request.get("clePartie")
        joueurs = dbJoueur().all()
        joueurs.filter("keyPartie =", db.Key(clePartie))
        nomJoueurConnecte = "Pas de joueur connecte"
        
        user = users.get_current_user()
        
        if user: nomJoueurConnecte = user.nickname()

        template_values = {
            'nomJoueurConnecte': nomJoueurConnecte,
            'clePartie': clePartie ,
            'listeJoueurs': joueurs,
        }

        path = os.path.join(os.path.dirname(__file__), 'html/afficheJoueur.html')
        self.response.out.write(template.render(path, template_values))    


class creeJoueur(webapp.RequestHandler):
    def get(self):
        clePartie = self.request.get("clePartie")

        identifiant = users.get_current_user()
        if identifiant == None : self.redirect(users.create_login_url(self.request.uri))

        royaumes = dbRoyaume().all()
        royaumes.filter("keyPartie =", db.Key(clePartie))

        titres = dbTitre().all()
        
        template_values = {
        	'nom':'inconnu',
        	'insurge':0,
        	'argent':0,
        	'identifiant':identifiant,
        	'clePartie': clePartie,
        	'royaumes': royaumes,
        	'titres': titres,
        }

        path = os.path.join(os.path.dirname(__file__), 'html/creeJoueur.html')
        self.response.out.write(template.render(path, template_values))    

class soumetJoueur(webapp.RequestHandler):
    def post(self):
        clePartie = self.request.get('clePartie')
        bases = clsBases(clePartie)
        bases.ajouteJoueur(self.request.get('nom'), 
                            self.request.get('royaume'),
                            self.request.get('titre'),
                            int(self.request.get('argent')),
                            int(self.request.get('insurge')))

        bases.setArmee(self.request.get('nom'),"0_|0_|0_|0_|0_|0_")
        
        self.redirect("/gestion/afficheJoueur?clePartie="+clePartie)

class logInJoueur(webapp.RequestHandler):
    def get(self):
        clePartie = self.request.get('clePartie')
        if users.get_current_user():
            url = users.create_logout_url("/gestion/afficheJoueur?clePartie="+clePartie)
        else:
            url = users.create_login_url("/gestion/afficheJoueur?clePartie="+clePartie)
            
        self.redirect(url)

#############################################################################
# GESTION ARMEE
#############################################################################
class afficheArmee(webapp.RequestHandler):
    def get(self):
        armees = dbArmee().all()
        cleJoueur = self.request.get("cleJoueur")
        armees.filter("keyJoueur =", db.Key(cleJoueur))

        template_values = {
            'cleJoueur': cleJoueur,
            'nomJoueur':'Armee de ' + armees[0].keyJoueur.keyTitre.nom + " " + armees[0].keyJoueur.nom,
            'listeArmees': armees,
        }

        path = os.path.join(os.path.dirname(__file__), 'html/afficheArmee.html')
        self.response.out.write(template.render(path, template_values))    

class modifieArmee(webapp.RequestHandler):
    def get(self):
        cleArmee = self.request.get("cleArmee")
        regions = dbRegion().all()
        
        armees = dbArmee().all()
        armees.filter("__key__ =",db.Key(cleArmee))
        armee = armees.get()

        template_values = {
            'armee':armee,
            'listeRegions': regions,
        }

        path = os.path.join(os.path.dirname(__file__), 'html/creeArmee.html')
        self.response.out.write(template.render(path, template_values))

#class creeArmee(webapp.RequestHandler):
#    def get(self):
#        cleJoueur = self.request.get("cleJoueur")
#        regions = dbRegion().all()
#
#        template_values = {
#            'cleJoueur':arme.keyJoueur.key(),
#            'listeRegions': regions,
#            'sequenceCombat':'|||||',
#            'regionDestination':'',
#            'regionDepart':''
#        }
#
#        path = os.path.join(os.path.dirname(__file__), 'html/creeArmee.html')
#        self.response.out.write(template.render(path, template_values))    

class soumetArmee(webapp.RequestHandler):
    def post(self):
        cleArmee = self.request.get("cleArmee")
        cleRegion = self.request.get("cleRegion")
        cleJoueur = self.request.get("cleJoueur")
        sequenceCombat = self.request.get("sequenceCombat")
        regionDepart = self.request.get("regionDepart")
        
        clsBases.majCreArmee(cleArmee,cleRegion,sequenceCombat,regionDepart)

        self.redirect("/gestion/afficheArmee?cleArmee="+cleArmee+"&cleJoueur="+cleJoueur)

#############################################################################
application = webapp.WSGIApplication([('/gestion/affichePartie', affichePartie),
                                      ('/gestion/creePartie', creePartie),
                                      ('/gestion/creePartiePreRemplis', creePartiePreRemplis),
                                      ('/gestion/startStopPartie', startStopPartie),
                                      ('/gestion/afficheJoueur', afficheJoueur),
                                      ('/gestion/creeJoueur', creeJoueur),
                                      ('/gestion/soumetJoueur', soumetJoueur),
                                      ('/gestion/login', logInJoueur),
                                      ('/gestion/afficheArmee', afficheArmee),
                                      ('/gestion/modifieArmee', modifieArmee),
                                      ('/gestion/soumetArmee', soumetArmee),
                                      ('/gestion/gereTour', gereTour)
                                      ],debug=True)
#############################################################################

def main():
    run_wsgi_app(application)

if __name__ == "__main__":
    main()
